//
//  main.swift
//  8.方法的参数修饰
//
//  Created by 左忠飞 on 2021/8/12.
//

import Foundation


func incrementor(num:Int) -> Int{
    return num + 1
}

let num1 = incrementor(num: 1)
print(num1)

//如果想在方法内改变参数的值
//默认是不能在方法内改变参数的值的
//需要在要修改的参数上加 inout 来修饰
func incrementor1(num:inout Int){
    num += 1
}


//调用方法时,需要在参数前加&,而且传入的参数必须是一个变量
var num2 = 2
incrementor1(num: &num2)
print(num2)

//最后，要注意的是参数的修饰是具有传递限制的，就是说对于跨越层级的调用，我们需要保证同一参数的修饰是统一的
func makeIncrementor(addNumber:Int) -> ((inout Int) -> ()) {
    func incrementor(num:inout Int){
        num += addNumber
    }
    return incrementor(num:)
}

//定义一个加3的加法器
let add3 = makeIncrementor(addNumber: 3)

var num3 = 3
add3(&num3)
print(num3)
